package com.n5x.service;

import com.n5x.model.user.*;

import java.util.List;

/**
 * Created by Administrator on 2017/9/22.
 */
public interface IUserService {

    // UserInfo

    /**
     * 保存或更新用户信息，并保存用户绑定账号信息
     *
     * @param userInfo    用户
     * @param userAccount 账号
     * @return 用户ID
     */
    UserInfo saveUserInfoAndAccount(UserInfo userInfo, UserAccount userAccount);

    /**
     * 保存或更新用户信息
     *
     * @param userInfo
     * @return
     */
    String saveUserInfo(UserInfo userInfo);


    /**
     * 查找用户信息
     *
     * @param criteria 查询条件[可选]
     * @return 用户列表
     */
    List<UserInfo> findUserInfoAll(UserInfoExample.Criteria criteria);

    int countUserInfoAll(UserInfoExample.Criteria criteria);

    /**
     * 按账号类型、登陆名称、密码查找用户信息
     *
     * @param type
     * @param login 登陆名称
     * @param pwd   密码
     * @return 用户对象，没有为null
     * @see UserAccount.AccountType
     */

    UserInfo findUserByAccount(Enum<UserAccount.AccountType> type, String login, String pwd);

    /**
     * 查找用户信息
     *
     * @param id
     * @return 用户信息
     */
    UserInfo findUserInfo(String id);

    /**
     * 查找用户信息
     *
     * @param phone
     * @return 用户信息
     */
    List<UserInfo> findUserInfoByPhone(String phone);

    /**
     * 检查用户名是否存在
     *
     * @param type  登陆账号类型
     * @param login 登陆名
     * @return
     */
    boolean cheackUserByAccount(Enum<UserAccount.AccountType> type, String login);

    /**
     * 根据登陆类型和loginName查找用户账号
     *
     * @param type  登陆账号类型
     * @param login 登陆名
     * @return
     */
    UserAccount findAccountByName(Enum<UserAccount.AccountType> type, String login);


    /**
     * 根据login查询用户
     *
     * @return
     */
    public UserInfo findUserInfoByLogin(String login);

    /**
     * 保存userAccount
     *
     * @return
     */
    public String saveUserAccount(UserAccount userAccount);

    //******************************************** UserTransactionRecord  ****************************************************
    List<UserTransactionRecord> findUserTransactionRecordAll(UserTransactionRecordExample.Criteria criteria);

    UserTransactionRecord findUserTransactionRecord(String id);

    UserTransactionRecord findUserTransactionRecordByTradeNo(String outTradeNo);

    String saveUserTransactionRecord(UserTransactionRecord userTransactionRecord, UserInfo userInfo, UserTransactionRecord extTransactionRecord);

    //******************************************** UserDiscount **************************************************************
    List<UserDisCount> findUserDisCount(String userId, String... userDisCountIds);

    UserDisCount saveUserDisCount(UserDisCount userDisCount);

}
